import { Component } from 'types/component'

// 当前实例
export let currentInstance: Component | null = null

/**
 * This is exposed for compatibility with v3 (e.g. some functions in VueUse
 * relies on it). Do not use this internally, just use `currentInstance`.
 * 这是为了与v3兼容而公开的（例如VueUse中的一些函数依赖于它）。
 * 不要在内部使用它，只需使用`currentInstance`。
 * 
 * @internal this function needs manual type declaration because it relies
 * on previously manually authored types from Vue 2
 * 此函数需要手动类型声明，因为它依赖于Vue 2中以前手动编写的类型

 */
// 获取当前实例
export function getCurrentInstance(): { proxy: Component } | null {
  return currentInstance && { proxy: currentInstance }
}

/**
 * 设置当前实例
 * @internal
 */
export function setCurrentInstance(vm: Component | null = null) {
  if (!vm) currentInstance && currentInstance._scope.off()
  currentInstance = vm
  vm && vm._scope.on()
}
